package com.easylinkin.linkappapi.tenant.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.easylinkin.linkappapi.deviceunit.entity.DeviceUnit;
import com.easylinkin.linkappapi.lobar.dto.UserProjectDTO;
import com.easylinkin.linkappapi.openapi.dto.ProjectRefDashboard;
import com.easylinkin.linkappapi.security.entity.LinkappPrivilege;
import com.easylinkin.linkappapi.security.entity.LinkappUser;
import com.easylinkin.linkappapi.tenant.dto.LinkappTenantDTO;
import com.easylinkin.linkappapi.tenant.entity.LinkappTenant;
import com.easylinkin.linkappapi.tenant.entity.TenantRefDeviceUnit;
import com.easylinkin.linkappapi.tenant.entity.TenantRefPrivilege;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Set;

/**
 * <p></p>
 *
 * @author liuming
 * @since 2020/4/14
 */
@Repository
public interface LinkappTenantMapper extends BaseMapper<LinkappTenant> {

	public List<LinkappTenant> selectLinkappTenantList(Page<LinkappTenant> page, @Param("tenant") LinkappTenant linkappTenant);

	public List<LinkappTenant> selectLinkappTenantList(@Param("tenant") LinkappTenant linkappTenant);

	public LinkappTenant selectLinkappTenant(LinkappTenant linkappTenant);

	List<LinkappPrivilege> selectPrivilegeByTenant(@Param("id") String id, @Param("type") Integer type);

	void deleteTenant2Privileges(@Param("id") String id, @Param("type") Integer type);

	void insertTenant2Privileges(TenantRefPrivilege tenantRefPrivilege);

	List<LinkappPrivilege> selectTenantPrivilegeByUser(@Param("id") String id, @Param("type") Integer type);

	List<LinkappPrivilege> selectApplicationPrivilegeMenuByUser(@Param("id") String id, @Param("type") Integer type);

	List<LinkappPrivilege> selectApplicationPrivilegeCustomByUser(@Param("tenantId") String tenantId, @Param("id") String id,@Param("type")  Integer type);

	List<DeviceUnit> selectDeviceUnitByTenant(@Param("id") String id);

	List<DeviceUnit> selectTenantDeviceUnitByUser(@Param("id") String id);

	void deleteTenant2DeviceUnits(String id);

	void insertTenant2DeviceUnits(TenantRefDeviceUnit TenantRefDeviceUnit);

	void deleteRole2Privileges(@Param("privilegeId") String privilegeId, @Param("tenantId") String tenantId);

	int batchInsert(@Param("list") List<TenantRefPrivilege> list);

	List<LinkappTenant> selectByProjectId(String valueOf);

	/**
	 * 根据手机号查询tenants信息
	 *
	 * @param phone 手机号
	 * @return tenants信息
	 */
	List<LinkappTenantDTO> selectUserTenantByPhone(String phone);

	List<LinkappTenantDTO> selectUserTenantByUser(LinkappUser username);

	/**
	 * 获取最后一个有配置的租户信息
	 *
	 * @return 租户信息
	 */
	LinkappTenant getLastHasConfigOne();

    LinkappTenant getById(String tenantId);

	IPage<LinkappTenantDTO> selectByName(Page page, @Param("queryParams") UserProjectDTO queryParams);

	LinkappTenant getOneByProjectId(@Param("projectId") Long projectId);

	List<LinkappTenant> selectByProjectIds(@Param("projectIds") Set<Long> projectIds);

	/**
	 * 根据项目查询大屏配置地址
	 *
	 * @param ids
	 * @return
	 */
    List<ProjectRefDashboard> getDashboardUrlByProjectIds(@Param("ids") List<Long> ids);

	List<LinkappTenant> selectAll();

    List<LinkappTenant> selectProjectNamesByTenantIds(@Param("tenantIds") Set<String> tenantIds);

    List<DeviceUnit> selectTenantDeviceUnitByUser(@Param("id") String id,@Param("deviceTypeName") String deviceTypeName);

}
